//评测题目: 无
/**
      * 请实现一个通用的Array解构赋值方法 destructuringArray，
      *     可将目标数组（targetArray）通过ES6的解构格式（formater），
      *     输出解构结果对象。
      *
      * - 通过优化函数名及参数语义以方便考生快速理解题目。
      *   - 函数名为 destructuringArray（解构数组）功能是将目标数组通过以下解构格式解构为最终对象。
      *   - 入参1是目标数组：targetArray{array}
      *   - 入参2是解构格式：formater{string}
      *   - 输出为 {object}，。
      *
      *   Example:
      *      destructuringArray( [1,[2,3],4], "[a,[b],c]" );
      *      // result
      *      { a:1, b:2, c:4 }
      */

    /**
    * 定义
    */
   
   // 先准备好目标数组
   let targetArray = [1,[2,3],4];

   // 再准备好解构格式
   let formater = "[a,[b],c]";

   /**
     * 解构数组
     * @param targetArray{Array} 目标数组
     * @param formater{String} 解构格式
     * @return {Object} 结果对象
     */
   export  function destructuringArray(arr: any[], exp: string){
    let result = {};
    let expArr;

    exp = exp.replace(/((\.{3})?\w+)/g, ($0, $1) => {
        console.log('$0', $0, '$1', $1, '👋')
        return `"${$1}"`;
      });
    expArr = JSON.parse(exp);
    console.log(expArr, '🌹')
  
    function main(result: any, arr: any[], expArr: any[]) {
        console.log(expArr, 'expArr')
      expArr.forEach((expItem, i) => {
        let currentValue = arr ? arr[i] : undefined;
        if (Array.isArray(expItem)) {
          main(result, currentValue, expItem);
          return;
        }
        if (expItem.startsWith("...")) {
          if (i !== expArr.length - 1) {
            throw new Error('... 解构只能在最后');
          }
          expItem = expItem.slice(3);
          result[expItem] = arr.slice(i);
          return;
        }
        // result[expItem] = arr === undefined ? undefined : currentValue;
        result[expItem] = arr === undefined ? undefined : currentValue;
      });
    }
    main(result, arr, expArr as string[]);
    return result; 
   };

// 运行
// console.dir( destructuringArray(targetArray,formater) )